Over recent years there has been a large increase in the number of end user computer devices for which programmers provide software, much of this increase being in the realm of devices for mobile telephony and mobile computing, including smart phones, tablet computers and the like, but also in the realm of more traditional style desktop computers as well as computers embedded in other manufactured goods such as cars, televisions and so forth. A large part of the software provided to such devices is in the form of applications commonly referred to as “apps”, and this software may typically be provided in the form of native code, scripting languages such as JavaScript, and other languages such as Java.
Often, such software, and data or content which the software is used to mediate to a user, is at risk of compromise if the software is not suitably protected using various software protection techniques. For example, such techniques may be used to make it very difficult for an attacker to extract an encryption key which could be used to gain unauthorised access to content such as video, audio or other data types, and may be used to make it very difficult for an attacker to replicate software for unauthorised use on other devices.
However, the use of such software protection techniques can lead to a reduction in the performance of the software, for example decreasing execution speed, increasing the amount of memory needed to store the software on a user device, or increasing the memory required for execution. Such software protection techniques may also be difficult to apply across a wide range of different software types, for example pre-existing software written in different source code languages or existing in particular native code formats.
It would be desirable to be able to provide protection against attacks for items of software, and to provide such protection across a range of software representations such as different source code languages and native code types, while also maintaining good levels of performance of the software on end user devices. It would also be desirable to deliver software suitably protected in this way for use on multiple different platform types.